package com.ruoyi.procurement.mapper;

import com.ruoyi.procurement.domain.ProcurementModel;
import com.ruoyi.procurement.domain.ProcurementOrder;
import com.ruoyi.product.domain.Product;
import com.ruoyi.product.domain.ProductModel;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 入库管理
 */
@Mapper
public interface ProcurementOrderMapper {
    /**
     * 查询订单入库信息
     *
     * @param procurementOrder 入库信息
     * @return 结果
     */
    List<ProcurementOrder> selectProcurementList(ProcurementOrder procurementOrder);

    List<Integer> selectProductType(String  productType);


    List<ProcurementOrder> selectProcurementOrderAI(ProcurementOrder procurementOrder);

    /**
     * 查询订单入库信息 已同意
     *
     * @param procurementOrder 查询条件
     * @return 结果
     */
    List<ProcurementOrder> selectProcurementLists(ProcurementOrder procurementOrder);

    /**
     * 查询入库订单信息
     *
     * @param map 日期
     * @return 结果
     */
    List<ProcurementOrder> selectProcurementWarehousingNameList(Map map);

    /**
     * 插入入库订单主表信息
     *
     * @param procurementOrder 插入条件
     * @return 结果
     */
    Long insertProcurementOrder(ProcurementOrder procurementOrder);

    /**
     * 插入入库订单从表信息
     *
     * @param procurementOrder 插入条件
     * @return 结果
     */
    void insertProcurementModelList(ProcurementOrder procurementOrder);

    /**
     * 删除入库订单信息
     *
     * @param procurementWarehousingId 订单信息主键
     */
    void deleteProcurementOrder(Long procurementWarehousingId);

    void deleteProcurementModelA(Long procurementWarehousingId);

    /**
     * 根据主键查询所有的入库详细信息 的主键
     *
     * @param procurementWarehousingId 主键
     * @return 结果 集合
     */
    List<Long> selectProcurementWarehousingIdList(Long procurementWarehousingId);

    /**
     * 根据主键删除所有的入库详细信息
     *
     * @param procurementWarehousingNo 需要删除的主键
     * @return 结果
     */
    void deleteProcurementModel(List<Long> procurementWarehousingNo);

    /**
     * 根据入库订单主键查询
     *
     * @param procurementWarehousingId 入库订单主键
     * @return 结果
     */
    ProcurementOrder selectProcurementById(Long procurementWarehousingId);

    /**
     * 根据入库订单主键查询入库型号信息
     *
     * @param procurementWarehousingId 入库订单主键
     * @return 结果
     */
    List<ProcurementModel> selectProcurementModelById(Long procurementWarehousingId);

    List<Product> selectProcurementModelByIdes(Long procurementWarehousingId);

    /**
     * 查询入库信息
     *
     * @param procurementOrder 查询条件
     * @return 结果
     */
    ProcurementOrder selectProcurementBy(ProcurementOrder procurementOrder);

    /**
     * 修改入库记录
     *
     * @param procurementOrder 入库信息
     */
    int updateProcurementOrder(ProcurementOrder procurementOrder);

    /**
     * 插入入库规格型号信息
     *
     * @param procurementModel 插入数据
     */
    void insertProcurementModel(ProcurementModel procurementModel);

    /**
     * 更新入库规格型号信息
     *
     * @param procurementModel 更新数据
     */
    void updateProcurementModel(ProcurementModel procurementModel);

    /**
     * wx公众号 查询采购入库 的 审核
     *
     * @param procurementWarehousingId 查询条件
     * @return 结果
     */
    List<Product> selectProcurementByIds(Long procurementWarehousingId);

    /**
     * 查询本公司下所有产品 主键
     *
     * @param product 查询条件
     * @return 结果
     */
    List<Long> selectProductModelByDeptId(Product product);

    /**
     * 查询本公司下所有产品
     *
     * @param product 查询条件
     * @return 结果
     */
    List<ProductModel> selectProductLists(Product product);

    List<Long> selectDeleteProduct(Map<String, Object> map1);


    /**
     * 插入入库订单从表信息 PDA
     *
     * @param procurementOrder 插入条件
     * @return 结果
     */
    void insertProcurementModelListPDA(ProcurementOrder procurementOrder);

    List<ProcurementOrder> selectProcurementBySaleGoodsId(Long saleGoodsId);

    /**
     * 入库查验记录 列表展示
     * @param procurementOrder
     * @return 返回入库订单的数据 和 销售退货的数据
     */
    List<ProcurementOrder> selectInventViewList(ProcurementOrder procurementOrder);

    /**
     * 入库核验记录 查看信息 （增加退货数量）
     *
     * @return 结果
     */
    ProcurementOrder selectProcurementAndReturn(ProcurementOrder procurementOrders);

    ProcurementOrder selectProcurementByMap(Map<String, Object> map);

    Long querypreviousId(Map<String, Object> params);
    Long queryNextId(Map<String, Object> params);

    List<Map<String, Object>> pendingReview(@Param("deptID") Long deptID);
}
